package com.gw.jpa.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Entity //定义为实体类
//@Data //相当于给实体类加get/set/toString/EqualsAndHashCode方法，是lombok的注解，但是产生的hashcode方法会与Jackson产生冲突
@Getter
@Setter //这里使用这个注解而不用@Data注解的原因是因为@Data会给实体类添加一个HashCode方法，这个方法会与@JsonIgnoreProperties注解产生冲突
@Table(name = "tb_grade") //告诉数据库对应的是哪张表，指定实体类和表之间的对应关系
public class Grade { //年级的实体类
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //设置主键自动增长策略
    private Integer gid; //年级的id
    @Column
    private String gname; //年级名称
    /**
     * 使用注解的方式配置年级对学生的一对多的关系
     * @OneToMany：配置一对多的关系
     * targetEntity: 配置对方的对象类型
     * @JoinColumn: 配置外键
     * 进行从表外键和主表主键进行关联
     */
    //配置年级与学生一对多的关系
    @OneToMany(targetEntity = Student.class)//一对多这个多是谁
    @JoinColumn(name = "sgid",referencedColumnName = "gid")//外键关联
    @JsonIgnoreProperties(value = "grade") //忽略学生下的年级信息,防止死循环
    private Set<Student> studentSet=new HashSet<>(); //年级下的学生集合
    public Grade() {

    }

    public Grade(Integer gid, String gname) {
        this.gid = gid;
        this.gname = gname;
    }
}
